#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"

using namespace std;
/*HJJ QQ479287006
 *给你一棵二叉树的根节点 root ，翻转这棵二叉树，并返回其根节点。
示例 1：
输入：root = [4,2,7,1,3,6,9]
输出：[4,7,2,9,6,3,1]
示例 2：

输入：root = [2,1,3]
输出：[2,3,1]
示例 3：

输入：root = []
输出：[]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/invert-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */
/*
 *
遍历的过程中去翻转每⼀个节点的左右孩⼦就可以达到整体翻转的效果。
注意只要把每⼀个节点的左右孩⼦翻转⼀下，就可以达到整体翻转的效果
这道题⽬使⽤前序遍历和后序遍历都可以，唯独中序遍历不⾏，因为中序遍历会把某些节点的左右孩⼦
翻转了两次！建议拿纸画⼀画，就理解了
那么层序遍历可以不可以呢？依然可以的！只要把每⼀个节点的左右孩⼦翻转⼀下的遍历⽅式都是可以
的
 *
 *
 * **/
TreeNode *invertTree(TreeNode *root) {
    if (!root)
        return root;

    TreeNode *temp = root->left;
    root->left = root->right;
    root->right = temp;

    invertTree(root->left);
    invertTree(root->right);

    return root;
}

//中序方法 因为已经交换节点了如果交换值 估计还真不会出事 class Solution {
//    public TreeNode invertTree(TreeNode root) {
//        if(root == null) return null;
//        invertTree(root.left);//注意这里是left
//        TreeNode temp = root.left;
//        root.left = root.right;
//        root.right = temp;
//        invertTree(root.left);//这里还是left
//        return root;
//    }
//}